//
//  SLStatus.swift
//  0319iOSweiboDemo
//
//  Created by Tang on 16/3/24.
//  Copyright © 2016年 大天朝. All rights reserved.
//

import UIKit

class SLStatus: NSObject {
    
    ///微博创建时间
     var created_at: String?
    
    
    ///微博ID
    var id: Int64 = 0
    
    
     ///微博信息内容
    var text: String?
    
    ///微博来源
    var source: String? {
        didSet {
            //当KVC设置来源  "source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>"
            //截取>(>*?)<  微博  weibo.com
            //在didSet给source不会再次调用didSet
           source = source?.sinaSource()
        }
    }
    
    ///微博配图.服务器返回的数组.数组里面又是字典.后续操作不方便.需要解析字典.当KVC的时候.模型提供图片URL地址数组
    var pic_urls: [[String: AnyObject]]? {
        didSet {
            //需要解析[[String: AnyObject]]里面的图片转成NSURL放到storePictureURLs数组里面来
           
            if pic_urls?.count == 0 {
                return
            }
            //有图片
            storePictureURLs = [NSURL]()
            //遍历pic_urls
            for dict in pic_urls! {
//                //解析字典中key: thumbnail_pic
//                if let urlString = dict["thumbnail_pic"] as? String {
//                    //创建NSURL
//                    if let url = NSURL(string: urlString) {
//                        storePictureURLs?.append(url)//可选绑定有值才进来
//                    }
//                }
                guard let urlString = dict["thumbnail_pic"] as? String else {
                    //可选绑定相反.没有值就进来.可以带代码块外面使用
                    print("没值")
                    break//或者continue
                }
                //能到下面来urlString 有值
                //创建URL
                guard let url = NSURL(string: urlString) else {
                    print("没值")
                    continue
                }
                storePictureURLs?.append(url)
            }
        }
    }
    
    /// 微博配图.里面存储的是微博配图URL地址
    var storePictureURLs: [NSURL]?
 
    
     ///转发数
    var reposts_count: Int = 0
    
     ///评论数
    var comments_count: Int = 0
    
    ///表态数
    var attitudes_count: Int = 0
    
    ///微博模型里面有一个user用户模型
    //虽然定义的是SLUser模型.kvc不会自动将user字典转成模型.会将user原来的内容(字典)赋值user属性
    //需要在kvc字典转模型的时候.拦截user这个属性的设置.自己来将字典转成SLUser
    var user: SLUser?
    
    //被转发的微博
    var retweeted_status: SLStatus?
    
    //行高
    var rowHeight: CGFloat?
        
    //字典转模型
     init(dict: [String: AnyObject]) {
        super.init()
        //创建对象
        
        //使用KVC赋值
        setValuesForKeysWithDictionary(dict)
    }
    //setValuesForKeysWithDictionary实际上调用setValue:forKey
    //获取字典里的每一个key.调用setVlaue:forKey  如果这个key在模型中找不到对应的属性.就调用setValue:forUndefinedKey
    override func setValue(value: AnyObject?, forKey key: String) {
//        SLPrint(msg: "forKey: \(key)")
        //拦截key=user时候我们自己来处理.字典转模型
        if key == "user" {
            //获取value
            if let dict = value as? [String: AnyObject] {
                //字典转模型.给user赋值
                user = SLUser(dict: dict)
            }
            //注意:拦截这个user之后.自己字典转模型.赋值给对象states的user属性.不要让它再调用父类的super.setValue(value, forKey: key)
            return
        }
        //拦截retweeted_status自己来转模型
        if key == "retweeted_status" {
            if let dict = value as? [String: AnyObject] {
                retweeted_status = SLStatus(dict: dict)
            }
            return
        }
        
        super.setValue(value, forKey: key)
    }
    
    //字典的key在模型中找不到对应的属性
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    //打印对象属性
    override var description: String {
        get { //只读计算性属性
            let keys = ["created_at", "id", "text", "source" ,"pic_urls", "reposts_count", "comments_count", "attitudes_count", "user"]
            
            return "\n \t:微博模型: \(dictionaryWithValuesForKeys(keys).description)"
        }
    }
/*
    
    返回值字段	字段类型	字段说明
    pic_urls    string   微博配图
    created_at	string	微博创建时间
    id	int64	微博ID
    mid	int64	微博MID
    idstr	string	字符串型的微博ID
    text	string	微博信息内容
    source	string	微博来源
    favorited	boolean	是否已收藏，true：是，false：否
    truncated	boolean	是否被截断，true：是，false：否
    in_reply_to_status_id	string	（暂未支持）回复ID
    in_reply_to_user_id	string	（暂未支持）回复人UID
    in_reply_to_screen_name	string	（暂未支持）回复人昵称
    thumbnail_pic	string	缩略图片地址，没有时不返回此字段
    bmiddle_pic	string	中等尺寸图片地址，没有时不返回此字段
    original_pic	string	原始图片地址，没有时不返回此字段
    geo	object	地理信息字段 详细
    user	object	微博作者的用户信息字段 详细
    retweeted_status	object	被转发的原微博信息字段，当该微博为转发微博时返回 详细
    reposts_count	int	转发数
    comments_count	int	评论数
    attitudes_count	int	表态数
    mlevel	int	暂未支持
    visible	object	微博的可见性及指定可见分组信息。该object中type取值，0：普通微博，1：私密微博，3：指定分组微博，4：密友微博；list_id为分组的组号
    pic_ids	object	微博配图ID。多图时返回多图ID，用来拼接图片url。用返回字段thumbnail_pic的地址配上该返回字段的图片ID，即可得到多个图片url。
    ad	object array	微博流内的推广微博ID

*/
    
}
